package gestordeentidades.persistance;

import gestordeentidades.GestorDeEntidades;

/**
 * Trabalho DAS - 2014/2015
 * @author a21210380, a21190325, a21210392
 */
public abstract class DataBaseObject {
    private int id;
    
    protected DataBaseObject() {
        this.id = 0;
    }
    
    /**
     * Devolve o id desta entidade
     * @return int
     */
    public int getId() {
        return this.id;
    }
    
    public boolean isRegistado() {
        return id != 0;
    }
    
    /**
     * Regista a entidade como nova no UnitOfWork
     */
    public void registarNovaEntidade() {
        if(id != 0)
            throw new IllegalStateException("registarNovaEntidade - A entidade já se encontra com um id válido!");
        
        id = GestorDeEntidades.getInstance().getNextId(getClass());
        GestorDeEntidades.getInstance().registarNovaEntidade(this);
    }
    
    /**
     * Regista a entidade como modificada no UnitOfWork
     */
    public void registarEntidadeModificada() {
        if(id == 0)
            throw new IllegalStateException("registarEntidadeModificada - A entidade não se encontra com um id válido! registarNovaEntidade() primeiro!!");
        GestorDeEntidades.getInstance().registarEntidadeModificada(this);
    }
    
    /**
     * Regista a entidade como apagada no UnitOfWork
     */
    public void registarEntidadeApagada() {
        if(id == 0)
            throw new IllegalStateException("registarEntidadeApagada - A entidade não se encontra com um id válido! registarNovaEntidade() primeiro!!");
        GestorDeEntidades.getInstance().registarEntidadeApagada(this);
        id = 0;
    }
}
